var __extends = this.__extends || function (d, b) {
        for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
        function __() { this.constructor = d; }
        __.prototype = b.prototype;
        d.prototype = new __();
    };
var CartObserver = (function () {
    function CartObserver() {
    }
    CartObserver.prototype.update = function (oCart) {
        $('#totalNumber').text(oCart.getTotalNumber());
        $('#totalAmount').text(oCart.getTotalAmount().toFixed(2));
    };
    return CartObserver;
})();
var CartItemController = (function (_super) {
    __extends(CartItemController, _super);
    function CartItemController(context, oCart) {
        _super.call(this);
        this._context = context;
        this._oCart = oCart;
        var nCartItemId = parseInt(context.attr('cart-item-id')), nCartNumber = parseInt(context.find('.product-num').val()), nPrice = parseFloat(context.find('.price').text()), _this = this;
        nPrice = isNaN(nPrice) ? 0 : nPrice;
        this._oCartItem = new CartItem(nCartItemId, nCartNumber, nPrice);
        oCart.addCartItem(this._oCartItem);
        //选择购物车项
        context.find('.cartItemChecked').bind('click', function () {
            if ($(this).prop('checked')) {
                oCart.addCartItem(_this._oCartItem);
            }
            else {
                oCart.removeCartItem(_this._oCartItem);
            }
            $('#selectedAll').prop('checked', $('.cartItemChecked:checked').length == $('.cartItemChecked').length);
        });
        //删除
        context.find('.del-item').bind('click', function () {
            oDialog.confirm('确定删除该商品?', function () {
                ajax({
                    url: base + "/cart/delete.jhtml",
                    data: {itemIds: nCartItemId},
                    showError: true,
                    cache: false,
                    success: function (data) {
                        refreshCartHtml();
                        oDialog.prompt("操作成功!");
                        oCart.deleteCartItem(_this._oCartItem);
                        context.remove();
                    }
                });
            });
        });
        //修改数量
        (new NumberChange($('.hp-stock', context))).setMin(1).addObserver(this);
        return this;
    }
    CartItemController.prototype.update = function (num) {
        var _this = this;
        ajax({
            url: base + "/cart/modifyNum.jhtml",
            data: {itemId: this._oCartItem.getId(), quantity: num},
            showError: true,
            cache: false,
            success: function (data) {
                _this._oCartItem.changeTotalNumber(num);
                _this._context.find('.subtotal').text(_this._oCartItem.getTotalAmount().toFixed(2));
                _super.prototype.update.call(_this, _this._oCart);
            }
        });
    };
    return CartItemController;
})(ConcreteSubject);


var CartObserver2 = (function () {
    function CartObserver2() {
    }
    CartObserver2.prototype.update = function (oCart) {
        $('#totalNumber2').text(oCart.getTotalNumber());
        $('#totalAmount2').text(oCart.getTotalAmount());
    };
    return CartObserver2;
})();
var CartItemController2 = (function (_super) {
    __extends(CartItemController2, _super);
    function CartItemController2(context, oCart) {
        _super.call(this);
        this._context = context;
        this._oCart = oCart;
        var nCartItemId = parseInt(context.attr('cart-item-id')), nCartNumber = parseInt(context.find('.product-num').val()), nPrice = parseFloat(context.find('.price').text()), _this = this;
        nPrice = isNaN(nPrice) ? 0 : nPrice;
        this._oCartItem = new CartItem(nCartItemId, nCartNumber, nPrice);
        oCart.addCartItem(this._oCartItem);
        //选择购物车项
        context.find('.cartItemChecked2').bind('click', function () {
            if ($(this).prop('checked')) {
                oCart.addCartItem(_this._oCartItem);
            }
            else {
                oCart.removeCartItem(_this._oCartItem);
            }
            $('#selectedAll2').prop('checked', $('.cartItemChecked:checked').length == $('.cartItemChecked2').length);
        });
        //删除
        context.find('.del-item2').bind('click', function () {
            oDialog.confirm('确定删除该商品?', function () {
                ajax({
                    url: base + "/cart/delete2.jhtml",
                    data: {itemIds: nCartItemId},
                    showError: true,
                    cache: false,
                    success: function (data) {
                        refreshCartHtml();
                        oDialog.prompt("操作成功!");
                        oCart.deleteCartItem(_this._oCartItem);
                        context.remove();
                    }
                });
            });
        });
        //修改数量
        (new NumberChange($('.hp-stock', context))).setMin(1).addObserver(this);
        return this;
    }
    CartItemController2.prototype.update = function (num) {
        var _this = this;
        ajax({
            url: base + "/cart/modifyNum2.jhtml",
            data: {itemId: this._oCartItem.getId(), quantity: num},
            showError: true,
            cache: false,
            success: function (data) {
                _this._oCartItem.changeTotalNumber(num);
                _this._context.find('.subtotal').text(_this._oCartItem.getTotalAmount().toFixed(2));
                _super.prototype.update.call(_this, _this._oCart);
            }
        });
    };
    return CartItemController2;
})(ConcreteSubject);


$(function () {
    (function () {
        //修改数量
        var oCartObserver = new CartObserver(), oCart = new Cart();
        oCart.addObserver(oCartObserver);
        oCartObserver.update(oCart);
        $('.cart-list-item').each(function (i) {
            var oCartItem = new CartItemController($(this), oCart);
            oCartItem.addObserver(oCartObserver);
        });
        $('#selectedAll, #selectedAll-label').click(function () {
            if ($('#selectedAll').prop('checked')) {
                oCart.tmpCartToCart();
            }
            else {
                oCart.cartToTmpCart();
            }
            $('.cartItemChecked').prop('checked', $('#selectedAll').prop('checked'));
        });
        //对选择的购物车项进行操作 可以从  oCart.getCartItems() 里面获取选择的购物车项对象
        $('#deleteAll').click(function() {
            batchDelete(oCart);
        });

        //结算
        $(".submit-btn").click(function(){
            confirm(oCart);
        });




        /////////////////////////////////////////////////

        var oCartObserver2 = new CartObserver2(), oCart2 = new Cart();
        oCart2.addObserver(oCartObserver2);
        oCartObserver2.update(oCart2);

        $('.cart-list-item2').each(function (i) {
            var oCartItem = new CartItemController2($(this), oCart2);
            oCartItem.addObserver(oCartObserver2);
        });
        $('#selectedAll2, #selectedAll-label2').click(function () {
            if ($('#selectedAll2').prop('checked')) {
                oCart2.tmpCartToCart();
            }
            else {
                oCart2.cartToTmpCart();
            }
            $('.cartItemChecked2').prop('checked', $('#selectedAll2').prop('checked'));
        });
        //对选择的购物车项进行操作 可以从  oCart.getCartItems() 里面获取选择的购物车项对象
        $('#deleteAll2').click(function() {
            batchDelete(oCart2);
        });

        //结算
        $(".submit-btn2").click(function(){
            confirm2(oCart2);
        });

    })();

    //结算
    function confirm(oCart){
        var itemIds = [];
        var cartItems = oCart.getCartItems();
        $.each(cartItems, function(i,oCartItem) {
            itemIds.push(oCartItem._cartItemId);
        });
        if(itemIds.length == 0) {
            oDialog.prompt('请选择要购买的商品!');
            return;
        }
        $("#buyForm").submit();
    }

    /**
     * 批量删除
     */
    function batchDelete(oCart) {
        var itemIds = [];
        var cartItems = oCart.getCartItems();
        $.each(cartItems, function(i,oCartItem) {
            itemIds.push(oCartItem._cartItemId);
        });

        if(itemIds.length == 0) {
            oDialog.prompt('请选择要删除的商品!');
            return;
        }
        oDialog.confirm('确当删除选中商品?', function () {
            ajax({
                url: base + "/cart/delete.jhtml",
                data: {itemIds: itemIds},
                showError: true,
                cache: false,
                success: function(data) {
                    refreshCartHtml();
                    oDialog.prompt("操作成功!");
                    oCart.deleteCartItem(cartItems);
                    itemIds.forEach(function(id) {
                        $('[cart-item-id='+id+']').remove();
                    })
                }
            });
        })
    }

    //结算
    function confirm2(oCart){
        var itemIds = [];
        var cartItems = oCart.getCartItems();
        $.each(cartItems, function(i,oCartItem) {
            itemIds.push(oCartItem._cartItemId);
        });
        if(itemIds.length == 0) {
            oDialog.prompt('请选择要购买的商品!');
            return;
        }
        $("#buyForm2").submit();
    }

    /**
     * 批量删除
     */
    function batchDelete2(oCart) {
        var itemIds = [];
        var cartItems = oCart.getCartItems();
        $.each(cartItems, function(i,oCartItem) {
            itemIds.push(oCartItem._cartItemId);
        });

        if(itemIds.length == 0) {
            oDialog.prompt('请选择要删除的商品!');
            return;
        }
        oDialog.confirm('确当删除选中商品?', function () {
            ajax({
                url: base + "/cart/delete.jhtml",
                data: {itemIds: itemIds},
                showError: true,
                cache: false,
                success: function(data) {
                    refreshCartHtml();
                    oDialog.prompt("操作成功!");
                    oCart.deleteCartItem(cartItems);
                    itemIds.forEach(function(id) {
                        $('[cart-item-id='+id+']').remove();
                    })
                }
            });
        })
    }






});

$(function(){

    $('.cart-list-item2').each(function (i) {

    });

    $("#P_cart").find('.cartItemChecked2').bind('click', function () {
        if ($(this).prop('checked')) {

        }
        else {

        }
        $('#selectedAll').prop('checked', $('.cartItemChecked2:checked').length == $('.cartItemChecked').length);
    });
});
